<?php
  // La responsabilidad del broker es la de administrar todas las características de acceso,
  // creación y enlace a la base de datos.
  class broker {

    var $host;
    var $user;
    var $pass;
    var $database;
    var $port;
    var $conn;
    var $utf8 = false;

    public function __construct() {
    } // end of method __construct()


    public function connect() {
      require("db.conf.php");

      $now = date("Y-m-d H:i:s") . substr((string)microtime(), 1, 8);

      $this->conn = mysql_pconnect($this->host.$this->port, $this->user, $this->pass);
      if (!$this->conn) {
        error_log("{$now} DB: No se pudo conectar con el servidor MySQL -> " . mysql_error() . "\r\n", 3, LOG_FILE);
        return FALSE;
      }

      if (!mysql_select_db($this->database, $this->conn)) {
        error_log("{$now} DB: No se pudo conectar con la base de datos -> {$this->database}" . mysql_error() . "\r\n", 3, LOG_FILE);
        return FALSE;
      }

      return TRUE;
    }


    public function disconnect() {
      mysql_close($this->conn);
    }

    public function query($sql) {
      if ($this->utf8) { 
        return $this->query_utf8($sql);
      }
      else {
        return $this->query_iso8859($sql);
      }
    }

    public function query_iso8859($sql) {
      if (!$this->connect()) return FALSE;
      $rs = mysql_query($sql);
      $res = array();

      if($rs) {
        $records = mysql_num_rows($rs);
        for($i=0;$i<$records;$i++) {
          $res[$i] = mysql_fetch_array($rs);
        }
      }
      else {
        $now = date("Y-m-d H:i:s") . substr((string)microtime(), 1, 8);
        error_log("{$now} DB: Error en consulta {$sql} -> " . mysql_error() . "\r\n", 3, LOG_FILE);
      }

      return $res;    
    }


    public function query_utf8($sql) {
      if (!$this->connect()) return FALSE;
      $rs = mysql_query($sql);
      $res = array();

      $keys = null;

      if($rs) {
        $records = mysql_num_rows($rs);
        for($i=0;$i<$records;$i++) {
          $row = mysql_fetch_array($rs);
          if (!$keys) {
            $keys = array_keys($row);
          }
          foreach ($keys as $key) {
            $res[$i][$key] = utf8_encode ($row[$key]);
          }
        }
      }

      else {
        $now = date("Y-m-d H:i:s") . substr((string)microtime(), 1, 8);
        error_log("{$now} DB: Error en consulta {$sql} -> " . mysql_error() . "\r\n", 3, LOG_FILE);
      }

      return $res;
    }


    public function delete($sql) {
      if (!$this->connect()) return FALSE;
      $rs = mysql_query($sql);

      if ($rs) {
        $res = TRUE;
      }
      else {
        $now = date("Y-m-d H:i:s") . substr((string)microtime(), 1, 8);
        error_log("{$now} DB: Error en consulta {$sql} -> " . mysql_error() . "\r\n", 3, LOG_FILE);
        $res = FALSE;
      }

      return $res;
    }


    public function update($sql) {
      if (!$this->connect()) return FALSE;
      $rs = mysql_query($sql);

      if ($rs) {
        $res = 1; // id
      }
      else {
        $now = date("Y-m-d H:i:s") . substr((string)microtime(), 1, 8);
        error_log("{$now} DB: Error en consulta {$sql} -> " . mysql_error() . "\r\n", 3, LOG_FILE);
        $res = 0;
      }

      return $res;
    }


    public function insert($sql) {
      if (!$this->connect()) return FALSE;
      $rs = mysql_query($sql);

      if ($rs) {
        $res_id = mysql_insert_id(); // id
      }
      else {
        $now = date("Y-m-d H:i:s") . substr((string)microtime(), 1, 8);
        error_log("{$now} DB: Error en consulta {$sql} -> " . mysql_error() . "\r\n", 3, LOG_FILE);
        $res_id = 0;
      }

      return $res_id;
    }

  } // class
